package stu.day33_day38.day34;

import java.util.HashMap;

public class hw1 {
    public int lengthOfLongestSubstring(String s) {
        HashMap<Character,Integer> map = new HashMap<>();
        int left = 0;
        int right = 0;
        int max = 0;

        for(int i=0;i<s.length();i++){
            if(!map.containsKey(s.charAt(i))){
                map.put(s.charAt(i),1);
                max = Math.max(max,i-left+1);
            }else {
             while (map.containsKey(s.charAt(i))){
                 map.remove(s.charAt(left));
                 left += 1;
             }
                map.put(s.charAt(i),1);
                max = Math.max(max,i-left+1);
            }
        }

        return max;

    }




    public int minSubArrayLen(int target, int[] nums) {
        int left = 0;
        int min = Integer.MAX_VALUE;
        int sum = 0;

        for(int i=0;i<nums.length;i++){
            sum += nums[i];
            while(sum>=target){
                min = Math.min(min,i-left+1);
                sum -= nums[left];
                left  += 1;
            }
        }
        return min==Integer.MAX_VALUE?0:min;
    }




    public int totalFruit(int[] fruits) {
        HashMap<Integer,Integer> map = new HashMap<>();
        int left = 0;
        int max = 0;

        for(int right=0;right<fruits.length;right++){
            int num = map.getOrDefault(fruits[right],0);
            map.put(fruits[right],num+1);
            while (map.size()>2){
                int n = map.get(fruits[right]);
                n = n-1;
                if(n==0){
                    map.remove(fruits[right]);
                }else {
                    map.put(fruits[right],n);
                }
                left += 1;
            }
            max = Math.max(max,right-left+1);

        }


        return max;




    }








}
